from django.shortcuts import render
from _datetime import date, timedelta
# Create your views here.
from meiduo_admin.home import serializers
from rest_framework.generics import GenericAPIView
from rest_framework.response import Response
from rest_framework.views import APIView
from goods.models import GoodCategoryVisit
from users.models import User
from meiduo_admin.home.serializers import GoodVisitCountSerializer


class UserTotalCountView(APIView):
    def get(self,request):
        # 查询用户总数
        # count = User.objects.filter(is_superuser=False,is_staff=False).count() #过滤管理员
        count = User.objects.count() # 不过滤管理员，直接查出来全部的数量
        # 返回响应
        return Response({"count":count})

class UserIncrementCountView(APIView):
    """日新增用户"""
    def get(self,request):
        """数据库里用户表中，有一个date_joined字段，所以，只要这个字段大于今天，就是新增的人数"""

        # 获取当前时间
        today = date.today()  #date是日期，所以，得到的是今天的日期，只要大于今天日期，就是新增用户
        # 查询新增用户
        count = User.objects.filter(date_joined__gte=today).count()  #根据字段，查出创建时间大于今天日期的用户数量
        #返回响应
        return Response({"count":count})


class UserDayActiveCountView(APIView):
    """日活用户"""
    def get(self,request):
        """登陆时间大于今天时间的，就是日活用户"""

        # 查出今天的日期
        today = date.today() #得到今天的日期

        # 获取日活用户数量
        count = User.objects.filter(last_login__gte=today).count()  #通过last_login这个字段，大于今天日期，查出日活数量

        return Response({"count":count})


class UserDayOrdersCountView(APIView):
    """获取日下单用户数量"""

    def get(self,request):
        """order_info表中，有create_time字段，如果这个字段大于今天日期，那就是今天的下单用户"""

        # 获取今天日期
        today = date.today()

        # 查询下单数量
        count = User.objects.filter(orderinfo__create_time__gte=today).count() #查出下单用户数量

        # 返回响应
        return Response({"count":count})

class UserMonthIncrementCountView(APIView):
    """获取月新增,前端的data是个列表，要返回data和count"""
    def get(self,request):
        #1，获取当天时间
        today = date.today()
        #2，再查出30天前的日期
        old_date = today - timedelta(days=29) #这是30天前的某一天的日期，从那一天算到今天，就是一个月

        #3，循环查出每天的新增数，添加到列表中
        users_list = []
        for i in range(0,30):

            #3.1获取当天时间
            current_date = old_date + timedelta(days=i) #当前时间等于30天前的日期，加上遍历的日期，就得到当前日期

            #3.2 获取当前时间的下一天
            next_date = old_date + timedelta(days=i+1) #30天前的那一天的日期，加上遍历出来的数，加1，得到下一天的时间

            #3.3 查询新增数
            count = User.objects.filter(date_joined__gte=current_date,date_joined__lt=next_date).count()
            # 当用户创建的时间，大于当天时间，小于下一天的时间时，就是这一天新增的用户
            # 再点count,得到数量，但此时得到的，并不是总数，而是每一天的新增数，所以要把它们放入列表中

            users_list.append({
                "date":current_date,
                "count":count,

            })

        #4,返回响应
        return Response(users_list)

"""date大于现在，就是商品的访问量，查询出来，返回即可"""
class GoodVisitCountView(GenericAPIView):

    serializer_class = serializers.GoodVisitCountSerializer

    def get(self,request):
        # 查出当前的日期
        today = date.today()
        # 通过商品分类表中的date字段，查出商品的访问量
        visit_count = GoodCategoryVisit.objects.filter(date__gte=today).all()
        # 通过序列化器，把模型类对象转化为json，返回即可
        serializer = self.get_serializer(instance=visit_count,many=True) #序列化转数据

        return Response(serializer.data)

